package com.atguigu.jinx.service;

import com.atguigu.jinx.entity.dto.JobTask;
import com.atguigu.jinx.entity.vo.*;
import com.atguigu.jinx.enums.SmsTemplateStatus;
import com.atguigu.jinx.utils.PageUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.validation.constraints.Email;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author steve
 * @since 2025-08-07
 */
public interface IJobTaskService extends IService<JobTask> {

    Object getPortalJobListVO();

    /**
     * 手机动态码登录
     *
     * @param phoneNum
     * @return
     */
    boolean sendPhoneDynamicCode(String phoneNum, SmsTemplateStatus smsTemplateStatus);


    /**
     * 手机动态码校验
     *
     * @param loginPhoneVO
     * @return
     */
    LoginResultVO phoneDynamicCodeLogin(LoginPhoneVO loginPhoneVO);

    /**
     * 发送注册信息
     *
     * @param userVO 用户信息
     * @return 注册结果
     */
    boolean sendLoginInfo(UserVO userVO);

    /**
     * 任务页面
     *
     * @param page
     * @param param
     * @return
     */
    PageUtils taskListPage(Page page, JobQueryParamVO param);

    /**
     * 任务详情
     *
     * @param jobId 页面参数
     * @return 页面详情
     */
    JobDetailVO taskDetail(String jobId);

    /**
     * 所有的查询条件列出来
     *
     * @return
     */
    List<String> getDistinctTitles();

    /**
     * 所有的查询条件列出来
     *
     * @return
     */
    List<String> getDistinctCities();

    /**
     * 检测是否为会员
     *
     * @param userId
     * @return
     */
    CheckMemberVO checkMember(String userId);

    /**
     * 申请结果
     *
     * @param applyFormVO
     * @return
     */
    void memberApply(ApplyFormVO applyFormVO);

    /**
     * 详情
     *
     * @param jobId
     * @return
     */
    JobDetailVipVO taskUserDetailVip(String jobId);

    /**
     * 账号密码登录
     *
     * @param loginUPVO
     * @return
     */
    LoginResultVO passWordLogin(LoginUPVO loginUPVO);

    /**
     * 用户发送手机号,我们来校验是否可以进行二次登录
     *
     * @param phoneNum 手机号
     * @param emailNum
     * @return
     */
    boolean forgetPasswordValid(String phoneNum, @Email String emailNum);

    /**
     * 忘记密码校验SMS验证码
     *
     * @param loginPhoneVO   用户名
     * @param forgetTemplate
     * @return 校验结果
     */
    boolean checkSmsCode(LoginPhoneVO loginPhoneVO, SmsTemplateStatus forgetTemplate);

    /**
     * 重置密码
     *
     * @param loginUPVO
     * @return
     */
    boolean resetPassword(ResetPasswordVO loginUPVO);

    /**
     * @param objectPage
     * @param param
     * @return
     */
    PageUtils taskListPageByUser(Page<Object> objectPage, JobQueryParamVO param);

    /**
     * @param jobId
     * @return
     */
    JobDetailVipVO taskJobsDetailVip(String jobId);

    boolean sendEmailDynamicCode(@Email(message = "邮箱格式不正确") String email);

    /**
     * 接单面板的信息
     *
     * @return 接单面板的金额详情
     */
    TaskNumVO taskNumPage();

    /**
     * 销量展示的信息
     *
     * @return 销量展示的种别=>城市;岗位;可接单比例
     */
    SalesNumVO salesDisplay();

    /**
     * 展示会员的订单
     *
     * @return 结果
     */
    MyJobNumDisplayVO myJobDisplay();


    /**
     *
     * @param emailNum
     * @param templateStatus
     * @return
     */
     boolean sendCodeIfUserExists(String emailNum, SmsTemplateStatus templateStatus);

}
